#-*- coding:utf-8 -*-
import os.path
import time
import openpyxl
from openpyxl.styles import PatternFill
from KeywordDriven import config

class Execl_Operator:

    def __init__(self,filename=os.path.join(config.testdatas_dir,"namekeys.xlsx")):
        # 设置文件的路径
        self.filepath=filename

        # 获取测试用例execl的工作普
        self.wk=openpyxl.load_workbook(filename)
        # print(self.wk)
        # pass
#第一步
    def get_casedata(self):
        # 需要获取执行工作表的名称
        casesname=self.get_casename()
        self.sheetnames=casesname
        values=[]
        # 循环每个工作表
        for sheetname in self.sheetnames:
            # 获取每个工作表的m数据
            print(sheetname)
            value=self.get_startcol_enndcol_value(sheetname)
            # values.append(value)
            casedata={}
            casedata["casename"]=sheetname
            casedata["stepdata"]=value
            values.append(casedata)
        return values
#第二步
    # 获取执行工作表的名称、
    def get_casename(self,sheetname=config.casesheetName):
        # h获取工作表的名称
        sheet=self.wk[sheetname]
        caseSname=[]
        # 根据是否执行取到用例的名称
        for row in range(2,sheet.max_row+1):
            # 循环汇总表每一行的数据  casesIsExcutecol是否执行所在的列
            isexecute=sheet.cell(row,config.casesIsExcutecol).value
            if isexecute == 'y':
                casename=sheet.cell(row,config.casestepname).value   #获取用例所在的sheet页
                caseSname.append(casename)
            else:
               continue
        print(caseSname)
        return caseSname


#第三步
    def get_startcol_enndcol_value(self,sheetname,start=config.keywordcol,end=config.actioncol):
        # 获取工作表用例名称工作表
        sheet=self.wk[sheetname]
        values=[]
        # 循环对于工作表中的没一行数据
        for row in range(2,sheet.max_row+1):
            setpdata=[]
            for col in range(start,end+1):
                value=sheet.cell(row,col).value
                if value !=None:
                    setpdata.append(value)
            values.append(setpdata)
        print(values)
        return values





    def write_stpe_result(self,sheetname,row,col,result):
        """写入测试步骤的结果"""
        casesheet=self.wk[sheetname]
        casesheet.cell(row,col).value=result
        # 颜色的填充  绿色通过， 红色失败
        redfill=PatternFill("solid",fgColor="00FF0000")
        grennfill=PatternFill("solid",fgColor="0000FF00")
        if result == 'FALSE':
            # 失败填充颜色为红色，成功为绿色
            casesheet.cell(row,col).fill=redfill
        else:
            casesheet.cell(row, col).fill = grennfill

        self.wk.save(self.filepath)

    # 把测试接结果写入汇总
    def write_case_result(self,sheetname=config.casesheetName,col=config.caseresultcol):
        # 获取执行用例的测试结果
        sheet=self.wk[sheetname]

        redfill=PatternFill("solid",fgColor="00FF0000")
        grennfill=PatternFill("solid",fgColor="0000FF00")

        # 循环汇总表的没一行
        for row in range(2,sheet.max_row+1):
            # 获取对应用例测试步骤的数据，如果测试步骤的数据是pass测试pass否则为false

            isExecute=sheet.cell(row,config.casesIsExcutecol).value
            if isExecute =="y":
                # 获取用例的名称
                casename=sheet.cell(row,config.cassstepnamecol).value
                # 获取每个用例的测试结果
                stepresults=self.get_shet_col_values(casename)
                if "FALSE" in stepresults:
                    # 写入汇总结果
                    sheet.cell(row, col).fill =redfill
                    sheet.cell(row,col).value="FALSE"

                else:
                    sheet.cell(row, col).fill=grennfill
                    sheet.cell(row, col).value = "PASS"

    def get_shet_col_values(self,sheetname):
        """获取谋改革工作诺表某类所有数据"""
        values=[]
        sheet=self.wk[sheetname]
        for row in range(2,sheet.max_row+1):
            stepresult=sheet.cell(row,config.casesetpResult).value
            values.append(stepresult)
        return values


    def write_step_time(self,sheetname,row,col=config.actiontimecol):
        sheet=self.wk[sheetname]
        current_time=time.strftime("%Y-%m-%d %H:%M:%S",time.localtime())
        sheet.cell(row,col).value=current_time
        self.wk.save(self.filepath)
        return current_time

if __name__ == '__main__':
    # print(Execl_Operator().get_casename())
    # print(Execl_Operator().get_shet_col_values("查询成功"))
    # print(Execl_Operator().write_step_time("查询成功",1,7))
    print(Execl_Operator().get_casedata())